﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LCTMoodle.Models.ViewModels;
using LCTMoodle.Models.DataModels;
using LCTMoodle.Service;
using LCTMoodle.Helper;

namespace LCTMoodle.Controllers
{
    public class BinhLuanController : Controller
    {
        #region KhoaHoc_Nhom_DienDan
        /// <summary>
        /// Lấy các bình luận của mã bài việc 
        /// </summary>
        /// <param name="ma">Mã bài viết</param>
        /// <param name="tu">Từ dòng thứ...</param>
        /// <param name="den">Đến dòng thứ...</param>
        /// <returns></returns>
        public JsonResult KhoaHoc_Nhom_DienDan_BinhLuan(int ma, int tu, int den)
        {
            //Lấy mã khóa học để lấy quyền
            int maKhoaHoc = KhoaHocService.layMaKhoaHocTheoMaBaiViet(ma);

            //Kiểm tra
            if (maKhoaHoc == 0)
            {
                return Json(new
                    {
                        trangThai = "Lấy mã khóa học thất bại (Lấy bình luận - diễn đàn)"
                    });
            }

            Tuple<List<BinhLuanViewModel>, int> model = new Tuple<List<BinhLuanViewModel>, int>
                (
                    BinhLuanService.layBinhLuanTheoMaBaiViet(ma, tu, den),
                    maKhoaHoc
                );

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (model.Item1 == null)
            {
                return Json(new
                {
                    trangThai = "Lấy bình luận thất bại (Lấy bình luận - diễn đàn)"
                });
            }

            return Json(new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/BinhLuan/KhoaHoc_Nhom_DienDan_BinhLuan.cshtml", model)
                });
        }
        
        /// <summary>
        /// Thêm bình luận
        /// </summary>
        /// <param name="form">Form cần có trường "MaBaiViet"</param>
        /// <returns></returns>
        //[ValidateInput(false)] //Dùng để cho phép truyền vào chuỗi html        
        public JsonResult KhoaHoc_Nhom_DienDan_ThemBinhLuan(FormCollection form)
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                return Json(new
                    {
                        trangThai = "Chưa đăng nhập (Thêm bình luận - diễn đàn)"
                    });
            }
            int maKhoaHoc = KhoaHocService.layMaKhoaHocTheoMaBaiViet(Convert.ToInt32(form["MaBaiViet"]));
            if (maKhoaHoc == 0)
            {
                return Json(new 
                    {
                        trangThai = "Lấy mã khóa học thất bài (Thêm bình luận - diễn đàn)"
                    });
            }
            switch (TienIch.kiemTraQuyenTrongKhoaHoc(maKhoaHoc, "5"))
            {
                case 0:
                    break;
                case 1:
                    return Json(new
                    {
                        trangThai = "Lấy quyền thất bại (Thêm bình luận - diễn đàn)"
                    });
                case 2:
                    return Json(new
                    {
                        trangThai = "Không có quyền thêm bình luận (Thêm bình luận - diễn đàn)"
                    });
                default: 
                    break;
            }
            #endregion Kiểm tra quyền

            BinhLuanDataModel binhLuan = new BinhLuanDataModel();

            //Kiểm tra xem trường "TapTin" có được tạo hay không trong trường hợp chặn gửi tập tin
            if (Request.Files["TapTin"] != null)
            {
                HttpPostedFileBase file = Request.Files["TapTin"];
                //Kiểm tra xem trường tập tin có được nhập tập tin hay ko
                if (file.ContentLength != 0)
                {
                    binhLuan.maTapTin = TapTinController.ThemTapTin(file);
                    if (binhLuan.maTapTin == 0)
                    {
                        return Json(new
                        {
                            trangThai = "Thêm tập tin thất bại (Thêm bình luận - diễn đàn)"
                        });
                    }
                }
                else
                {
                    binhLuan.maTapTin = 0;
                }
            }
            //Gán
            binhLuan.maBaiViet = Convert.ToInt32(form["MaBaiViet"]);
            binhLuan.maNguoiTao = ((NguoiDungViewModel)Session["NguoiDung"]).ma;
            binhLuan.noiDung = TienIch.chuyenChuoiHtml(form["NoiDung"]);

            //Lấy bình luận vừa nhập để hiển thị và mà khóa học để lấy quyền
            int maBinhLuan = BinhLuanService.themBinhLuan(binhLuan);

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (maBinhLuan == 0)
            {
                if (!TapTinController.XoaTapTinTheoMaTapTin(binhLuan.maTapTin))
                {
                    return Json(new
                    {
                        trangThai = "Thêm bình luận thất bại, xóa tập tin thất bại (Thêm bình luận - diễn đàn)"
                    });
                }
                return Json(new
                    {
                        trangThai = "Thêm bình luận thất bại (Thêm bình luận - diễn đàn)"
                    });
            }

            
            //Kiểm tra nếu lấy dữ liệu thất bại
            if (maKhoaHoc == 0)
            {
                return Json(new
                {
                    trangThai = "Thêm bình luận thành công, lấy mã khóa học thất bại (Thêm bình luận - diễn đàn)"
                });
            }

            Tuple<List<BinhLuanViewModel>, int> model = new Tuple<List<BinhLuanViewModel>, int>
            (
                new List<BinhLuanViewModel>(),
                maKhoaHoc
            );

            model.Item1.Add(BinhLuanService.layBinhLuanTheoMaBinhLuan(maBinhLuan));

            //Kiểm tra nếu lấy dữ liệu thất bại
            if (model.Item1 == null)
            {
                return Json(new
                {
                    trangThai = "Lấy bình luận thất bại (Thêm bình luận - diễn đàn)"
                });
            }

            return Json(new
                {
                    trangThai = "OK",
                    ketQua = ControllerHelper.RenderRazorViewToString("~/Views/BinhLuan/KhoaHoc_Nhom_DienDan_BinhLuan.cshtml", model)
                });
        }
        #endregion
        public ContentResult XoaBinhLuan(int ma)
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                return Content("Chưa đăng nhập (Xóa bình luận)");
            }
            int maKhoaHoc = KhoaHocService.layMaKhoaHocTheoMaBinhLuan(ma);
            if (maKhoaHoc == 0)
            {
                return Content("Lấy mã khóa học thất bại");
            }
            switch(TienIch.kiemTraQuyenTrongKhoaHoc(maKhoaHoc, "7"))
            {
                case 0:
                    break;
                case 1:
                    return Content("Lấy quyền thất bại (Xóa bình luận)");
                case 2:
                    BinhLuanViewModel binhLuan = BinhLuanService.layBinhLuanTheoMaBinhLuan(ma);
                    if (binhLuan == null)
                    {
                        return Content("Lấy bình luận thất bại (Xóa bình luận)");
                    }
                    if (binhLuan.maNguoiTao == (Session["NguoiDung"] as NguoiDungViewModel).ma)
                    {
                        break;
                    }
                    return Content("Không có quyền xóa bình luận (Xóa bình luận)");
                default:
                    break;
            }
            #endregion Kiểm tra quyền

            //Xóa tập tin của bình luận trước khi xóa bình luận
            TapTinViewModel tapTin = TapTinService.layTapTinTheoMaBinhLuan(ma);
            if (tapTin != null)
            {
                TienIch.xoaTapTin(tapTin.tenDuongDan);
            }

            if (BinhLuanService.xoaBinhLuanTheoMaBinhLuan(ma))
            {
                return Content("OK");
            }
            else
            {
                return Content("Xóa bài viết thất bại (Xóa bình luận)");
            }
        }
    }
}
